package org.simple.redis.factory;

import org.simple.redis.RedisLock;
import org.simple.redis.impl.RedisLockImpl;
import redis.clients.jedis.Jedis;

/**
 * 创建分布式锁工厂方法
 *
 * @author sisyphus
 * @since RedisLock 0.1.0
 */
public class RedisLockFactory {

    /**
     * 默认超时时间，毫秒为单位
     */
    private static final long DEFAULT_TIMEOUT = 1000L;

    /**
     * 构造一个默认的分布式锁，默认3秒超时
     *
     * @param lockName .
     * @return .
     */
    public static RedisLock create(String lockName, Jedis jedis) {
        return create(lockName, jedis, DEFAULT_TIMEOUT);
    }

    /**
     * 构造一个分布式锁，以传入的timeout为超时时间
     *
     * @param lockName .
     * @param timeOut  .
     * @return .
     */
    public static RedisLock create(String lockName, Jedis jedis, long timeOut) {
        if (timeOut < 1000) {
            throw new UnsupportedOperationException("超时时间需大于1秒");
        }
        return new RedisLockImpl(lockName, timeOut, jedis);
    }
}
